﻿


//function DebugSave() {

//    window.planProdCtrl.SaveChanges(2);

//}

//function DebugAddNewProduct() {

//    var product =
//    {
//        Id: 1,
//        ProductoIdExterno: 1,
//        ProductoNombre: 'art nuevo',
//        ColorId: '1',
//        Color: 'color nuevo',
//        CalidadId: 1,
//        Calidad: 'calidad nueva'
//    };

//    window.planProdCtrl.AddNewRowProduct(product);
//}


function PlanProdConDesviosCtrl(obj) {

    var _I = this;
    this._obj = obj;

    _I._showDeleteButton = $('#' + obj.id).attr('showdeletebutton') == 'true';
    _I._deleteImageSrc = $('#' + obj.id).attr('deleteimagesrc');
    _I._showCommandButton = $('#' + obj.id).attr('showcommandbutton') == 'true';
    _I.showCommandImgSrc = $('#' + obj.id).attr('showcommandimgsrc');

    _I.Desvio = {};
    _I.Desvio.Cambio = 0;
    _I.Desvio.Movimiento = 1;
    _I.Desvio.PasajeASegunda = 2;

    this._constColumnasNoVariables = 3 + (_I._showDeleteButton ? 1 : 0) + (_I._showCommandButton ? 1 : 0);

    this.Initialize = function () {

        // Cargo los eventos en los inputs
        $('.cPlanProdInputCant').change(function () {
            _I._changeEventForInput(this);
        });

        $('.cPlanProdInputCant').focus(function () {
            _I.focusEventForInput(this);
        });

        $('.cPlanProdInputCant').focusout(function () {
            _I.focusoutEventForInput(this);
        });

        $('.cPlanProdInputCant').keyup(function (e) {
            _I.arrowMovementEventForInput(this, e);
        });

        $('a[id^=a_planprod_remove_]').click(function () {
            _I.removeRowHandler(this);
        });
    };

    this._changeEventForInput = function (inputCtrl) {
        // sumo el total

        var inputNameParsed = inputCtrl.id.split('_');
        var fila = inputNameParsed[1];
        var columna = inputNameParsed[2];
        var inputTotalName = '#planprodtotal_' + fila;
        var totalCtrl = $(inputTotalName);

        var columna = 0;
        var existeCtrl = true;
        var inputGenericName = '#planprodcant_' + fila + '_';
        var inputName = '';
        var total = 0;
        while (existeCtrl) {
            inputName = inputGenericName + columna;
            var inputCtrl = $(inputName);
            if (inputCtrl.length != 0) {
                if (!isNaN(inputCtrl.val())) {
                    total += parseInt(inputCtrl.val());
                }
                else {
                    inputCtrl.val('0');
                }
            }
            else {
                existeCtrl = false;
            }

            columna++;
        }

        totalCtrl.val(total);

        _I._OnChangeTotal();
    }

    this._changeEventForInputDesvio = function (inputCtrl) {
        // sumo el total

        var inputNameParsed = inputCtrl.id.split('_');
        var fila = inputNameParsed[2];
        var columna = inputNameParsed[3];
        var inputTotalName = '#planproddesvio_total_' + fila;
        var totalCtrl = $(inputTotalName);

        var columna = 0;
        var existeCtrl = true;
        var inputGenericName = '#planprodcant_desvio_' + fila + '_';
        var inputName = '';
        var total = 0;
        while (existeCtrl) {
            inputName = inputGenericName + columna;
            var inputCtrl = $(inputName);
            if (inputCtrl.length != 0) {
                if (!isNaN(inputCtrl.val())) {
                    total += parseInt(inputCtrl.val());
                    totalCtrl.removeClass('cPlanProdInputBackRed');                    
                }
                else {
                    inputCtrl.val('0');
                }
            }
            else {
                existeCtrl = false;
            }

            columna++;
        }

        totalCtrl.val(total);

        //_I._OnChangeTotal();
    }

    this.focusEventForInput = function (inputCtrl) {
        if ($(inputCtrl).attr('readonly') == '') {
            $(inputCtrl).addClass('cPlanProdInputCantWithFocus');
        }
        inputCtrl.select();
    }

    this.focusoutEventForInput = function (inputCtrl) {
        if ($(inputCtrl).attr('readonly') == '') {
            $(inputCtrl).removeClass('cPlanProdInputCantWithFocus');
        }
    }

    this.arrowMovementEventForInput = function (inputCtrl, e) {

        var key = e.which || e.keyCode;

        inputCtrl.value = inputCtrl.value.replace(/[^0-9\.]/g, '');
        if (inputCtrl.value == '') {
            inputCtrl.value = '0';
        }

        if (key == 37 || key == 38 || key == 39 || key == 40) {
            var sigoBuscando = true;
            while (sigoBuscando) {
                var inputNameParsed = inputCtrl.id.split('_');
                var fila = parseInt(inputNameParsed[1]);
                var columna = parseInt(inputNameParsed[2]);
                var inputGenericName = '#planprodcant_';
                // abajo         
                if (key == 40) fila++;
                // derecha         
                if (key == 39) columna++;
                // arriba         
                if (key == 38) fila--;
                // izquierda         
                if (key == 37) columna--;

                var ctrlTargetName = inputGenericName + fila + '_' + columna;
                var inputCtrl = $(ctrlTargetName);
                if (inputCtrl.length != 0) {
                    if (inputCtrl.attr('removed') == 'true') {
                        sigoBuscando = true;
                        inputCtrl = inputCtrl.get(0);
                    }
                    else {
                        sigoBuscando = false;
                        //_I.focusEventForInput(inputCtrl);
                        inputCtrl.focus();
                        inputCtrl.select();
                    }
                }
                else {
                    sigoBuscando = false;
                }
            }
        }
    }

    this.arrowMovementEventForInputDesvio = function (inputCtrl, e) {

        var key = e.which || e.keyCode;

        inputCtrl.value = inputCtrl.value.replace(/[^0-9\.]/g, '');
        if (inputCtrl.value == '') {
            inputCtrl.value = '0';
        }

        if (key == 37 || key == 38 || key == 39 || key == 40) {
            var sigoBuscando = true;
            while (sigoBuscando) {
                var inputNameParsed = inputCtrl.id.split('_');
                var fila = parseInt(inputNameParsed[2]);
                var columna = parseInt(inputNameParsed[3]);
                var inputGenericName = '#planprodcant_desvio_';
                // abajo         
                //if (key == 40) fila++;
                // derecha         
                if (key == 39) columna++;
                // arriba         
                //if (key == 38) fila--;
                // izquierda         
                if (key == 37) columna--;

                var ctrlTargetName = inputGenericName + fila + '_' + columna;
                var inputCtrl = $(ctrlTargetName);
                if (inputCtrl.length != 0) {
                    if (inputCtrl.attr('removed') == 'true') {
                        sigoBuscando = true;
                        inputCtrl = inputCtrl.get(0);
                    }
                    else {
                        sigoBuscando = false;
                        //_I.focusEventForInput(inputCtrl);
                        inputCtrl.focus();
                        inputCtrl.select();
                    }
                }
                else {
                    sigoBuscando = false;
                }
            }
        }
    }

    this.RegisterChangeTotal = function (objFunction) {
        _I.changeTotalHandler = objFunction;
    }

    this._OnChangeTotal = function () {

        if (_I.changeTotalHandler) {
            var total = 0;
            $('input[id^=planprodtotal_').each(function () {
                total += parseInt($(this).val());
            });

            _I.changeTotalHandler(total);
        }
    }


    this.AddNewRowProduct = function (objProduct) {

        // si ya existe el id de producto no lo puedo agregar
        if ($("td[productoId='" + objProduct.Id + "']").length == 0) {

            var lastTr = $('.cPlanProdTable tr').last();
            var filas = $('.cPlanProdTable tr').length;
            var columnas = lastTr[0].cells.length;

            filas = filas - 1;

            // me fijo que estilo necesita
            var rowStyleClass = '';

            if (lastTr.attr('class') == 'cPlanProdRowPar') {
                rowStyleClass = 'cPlanProdRowImpar';
            }
            else {
                rowStyleClass = 'cPlanProdRowPar';
            }

            var rowHtml = "<tr class='" + rowStyleClass + "' id='tr_row_" + filas + "' >";

            rowHtml += "<td class='cPlanProdInvisible' innerId='0' id='td_id_" + filas + "' productoId='" + objProduct.Id + "'>0</td>";

            if (_I._showDeleteButton) {
                rowHtml += "<td innerId='0' id='td_remove_" + filas + "' class='cTdEliminar'><a id='a_planprod_remove_" + filas + "' href='#'><img alt='' src='" + _I._deleteImageSrc + "' /></a></td>";
            }

            if (_I._showCommandButton) {
                rowHtml += "<td innerId='0' id='td_command_" + filas + "' class='cTdCommand'><a id='a_planprod_command_" + filas + "' href='javascript:void();'><img alt='' src='" + _I.showCommandImgSrc + "' /></a></td>";
            }

            rowHtml += "<td filaId='" + filas + " innerId='" + objProduct.ProductoIdExterno + objProduct.ColorId + "' title='" + objProduct.ProductoNombre + " - " + objProduct.ColorNombre + " - " + objProduct.Calidad + "'>" + objProduct.ProductoIdExterno + objProduct.ColorId + "</td>";
            //            rowHtml += "<td innerId='" + objProduct.ProductoIdExterno + "'>" + objProduct.ProductoNombre + "</td>";
            //            rowHtml += "<td innerId='" + objProduct.ColorId + "'>" + objProduct.ColorNombre + "</td>";
            //            rowHtml += "<td innerId='" + objProduct.CalidadId + "'>" + objProduct.Calidad + "</td>";


            var columnaSemana = 0;
            var numeroSemana;
            var totalColumnasSemanas = columnas - _I._constColumnasNoVariables;
            for (columnaSemana = 0; columnaSemana < totalColumnasSemanas; columnaSemana++) {
                numeroSemana = columnaSemana + 1;
                rowHtml += "<td innerId='" + numeroSemana + "' class='cPlanProdDataTd'><input class='cPlanProdInputCant' id='planprodcant_" + filas + "_" + columnaSemana + "' type='text' value='0' oldValue='0' /></td>";
            }

            rowHtml += "<td class='cPlanProdTdTotal'><input class='cPlanProdInputTotal' readonly='readonly' id='planprodtotal_" + filas + "' type='text' value='0' oldValue='0' /></td>";

            rowHtml += "</tr>";

            // agrega el html de la nueva fila
            lastTr.after(rowHtml);


            $("input[id^=planprodcant_" + filas + ']').change(function () {
                _I._changeEventForInput(this);
            });

            $("input[id^=planprodcant_" + filas + ']').focus(function () {
                _I.focusEventForInput(this);
            });

            $("input[id^=planprodcant_" + filas + ']').focusout(function () {
                _I.focusoutEventForInput(this);
            });

            $("input[id^=planprodcant_" + filas + ']').keyup(function (e) {
                _I.arrowMovementEventForInput(this, e);
            });

            $('a[id^=a_planprod_remove_' + filas + ']').click(function () {
                _I.removeRowHandler(this);
            });
        }
    }

    this.validarGuardar = function () {

        var errorPanel = new ErrorPanel();
        errorPanel.removeErrors();

        var errorStr = '';
        var isError = false;

        if ($('#cboDesvioCausa').val() == -1) {

            errorStr += 'Debe seleccionar una causa de desvío';

            errorStr += '<br />';
            isError = true;
            errorPanel.appendAsterisk('cboDesvioCausa');
        }

        var tipoDesvioVal = $('#cboTipoDesvio').val();

        if (tipoDesvioVal == -1) {

            errorStr += 'Debe seleccionar un tipo de desvío';

            errorStr += '<br />';
            isError = true;
            errorPanel.appendAsterisk('cboTipoDesvio');
        }

        if (tipoDesvioVal == _I.Desvio.Cambio) {

            // No valida
        }
        else if (tipoDesvioVal == _I.Desvio.Movimiento) {
            // Valida q las cantidades sean iguales
            var movimientoError = _I.validarMovimiento();
            if (movimientoError) {
                errorStr += movimientoError;
                isError = true;
            }
        }
        else if (tipoDesvioVal == _I.Desvio.PasajeASegunda) {
            // No valida
        }

        if (isError) {
            errorPanel.showError('Controle los siguientes errores: ', errorStr);
        }

        return !isError;

    }

    this.validarMovimiento = function () {

        var errorStr = '';
        var errorPanel = new ErrorPanel();

        var total = 0;
        $('input[id^=planprodtotal_').each(function () {

            try {
                var inputTotalName = $(this).attr('id');
                //alert(inputTotalName);

                var rowId = inputTotalName.split('_')[1];

                var valorInputTotal = $(this).val();
                var valorInputTotalDesvio = $('#planproddesvio_total_' + rowId).val();

                if (valorInputTotalDesvio != undefined) {
                    // Si los valores no coinciden Hay un error
                    if (valorInputTotal != valorInputTotalDesvio) {
                        $('#planproddesvio_total_' + rowId).addClass('cPlanProdInputBackRed');

                        errorStr += "El valor del movimiento no coincide para el producto " + $('td[filaId=' + rowId + ']').attr('innerId');
                        errorStr += "<br />";
                    }
                }
            }
            catch (err) {
                alert(err);
            }

        });

        return errorStr;
    }

    this.AddDesvioEditRow = function (filaId) {

        // si ya existe el id de producto no lo puedo agregar
        //if ($("td[productoId='" + objProduct.Id + "']").length == 0) {

        var esSegunda = $('#cboTipoDesvio').val() == _I.Desvio.PasajeASegunda;

        //var lastTr = $('.cPlanProdTable tr').last();
        var actualTr = $('tr[id=tr_row_' + filaId + ']');

        // Solo agrego una fila para cargar desvíos por vez
        if (actualTr.attr('desvioVisible') == undefined) {

            actualTr.attr('desvioVisible', 'yes');

            //var filas = $('.cPlanProdTable tr').length;
            var columnas = actualTr[0].cells.length;

            //filas = filas - 1;

            var productoCell = actualTr.find('td[id=td_id_' + filaId + ']');
            var codigoCell = actualTr.find('td[filaId=' + filaId + ']');
            var productoId = productoCell.attr('productoId');
            var productoYColorIdExterno = codigoCell.attr('innerId');
            var productoTitle = codigoCell.attr('title');

            // me fijo que estilo necesita
            var rowStyleClass = '';

            rowStyleClass = 'cPlanProdRowDesvio';

            var rowHtml = "<tr class='" + rowStyleClass + "' id='tr_row_desvio_" + filaId + "' >";

            rowHtml += "<td class='cPlanProdInvisible' innerId='0' id='td_id_" + filaId + "' productoId='" + productoId + "'>" + productoId + "</td>";

            if (_I._showDeleteButton) {
                rowHtml += "<td innerId='" + productoId + "' id='td_remove_desvio_" + filaId + "' class='cTdEliminar'></td>";
            }

            if (_I._showCommandButton) {
                rowHtml += "<td innerId='" + productoId + "' id='td_command_" + filaId + "' class='cTdCommand'></td>";
            }

            rowHtml += "<td filaId='" + filaId + " innerId='" + productoYColorIdExterno + "' title='" + productoTitle + "'>" + productoYColorIdExterno + "</td>";

            var columnaSemana = 0;
            var numeroSemana;
            var totalColumnasSemanas = columnas - _I._constColumnasNoVariables;
            var valorAnterior = 0;
            for (columnaSemana = 0; columnaSemana < totalColumnasSemanas; columnaSemana++) {
                numeroSemana = columnaSemana + 1;

                var inputAnterior = $("#planprodcant_" + filaId + "_" + columnaSemana);
                if (esSegunda) {
                    valorAnterior = 0;
                }
                else {
                    valorAnterior = inputAnterior.val();
                }

                var claseReadOnly = '';
                if (inputAnterior.attr('makeReadOnly')) {

                    claseReadOnly = "readonly='readonly'";
                }

                rowHtml += "<td innerId='" + numeroSemana + "' class='cPlanProdDataTd'><input class='cPlanProdInputCantDesvio' " + claseReadOnly + " name='planprodcant_desvio_" + productoId + "_" + columnaSemana + "' id='planprodcant_desvio_" + filaId + "_" + columnaSemana + "' type='text' value='" + valorAnterior + "' /></td>";
            }

            var valorTotalAnterior = 0;

            if (esSegunda) {
                valorTotalAnterior = 0;
            }
            else {
                valorTotalAnterior = $('#planprodtotal_' + filaId).val();
            }
            rowHtml += "<td class='cPlanProdTdTotal'><input class='cPlanProdInputDesvioTotal' readonly='readonly' id='planproddesvio_total_" + filaId + "' type='text' value='" + valorTotalAnterior + "' oldValue='" + valorTotalAnterior + "' /></td>";

            rowHtml += "</tr>";

            // agrega el html de la nueva fila
            actualTr.after(rowHtml);

            $("input[id^=planprodcant_desvio_" + filaId + ']').change(function () {
                _I._changeEventForInputDesvio(this);
            });

            $("input[id^=planprodcant_desvio_" + filaId + ']').focus(function () {
                _I.focusEventForInput(this);
            });

            $("input[id^=planprodcant_desvio_" + filaId + ']').focusout(function () {
                _I.focusoutEventForInput(this);
            });

            $("input[id^=planprodcant_desvio_" + filaId + ']').keyup(function (e) {
                _I.arrowMovementEventForInputDesvio(this, e);
            });

            //            $('a[id^=a_planprod_remove_' + filaId + ']').click(function () {
            //                _I.removeRowHandler(this);
            //            });
        }
        else {
            actualTr.removeAttr('desvioVisible');

            var trDesvio = $('#tr_row_desvio_' + filaId);
            trDesvio.remove();

        }
    }

    this.removeRowHandler = function (anchor) {

        var anchorNameSplit = anchor.id.split('_');
        var rowId = anchorNameSplit[3];


        if (confirm('Está seguro que desea eliminar el registro?  ' + $('td[filaId="' + rowId + '"]').attr("innerId"))) {

            $('#tr_row_' + rowId).attr('removed', 'true'); // la fila esta borrada
            $('#tr_row_' + rowId + ' td input').attr('removed', 'true'); // los inputs figuran como borrados
            $('#tr_row_' + rowId).addClass('cPlanProdInvisible'); // oculto la fila
            $('#tr_row_' + rowId + ' ~ tr.cPlanProdRowImpar').addClass('eraImpar');
            $('#tr_row_' + rowId + ' ~ tr.cPlanProdRowPar').removeClass('cPlanProdRowPar').addClass('cPlanProdRowImpar'); // cambio el color de las filas
            $('#tr_row_' + rowId + ' ~ tr.eraImpar').removeClass('cPlanProdRowImpar eraImpar').addClass('cPlanProdRowPar'); // cambio el color de las filas
        }
    }


    this.SaveChanges = function (planProduccionId) {

        var arrayUpdatesParam = new Array();
        var arrayDeletesParam = new Array();

        $('.cPlanProdInputCant').each(function () {

            var inputNameParsed = this.id.split('_');
            var fila = parseInt(inputNameParsed[1]);
            var columna = parseInt(inputNameParsed[2]);

            var idItemName = '#td_id_' + fila;
            var idItem = $(idItemName).get(0).innerId;
            var productoId = parseInt($(idItemName).get(0).productoId);
            var idInt = parseInt(idItem);

            // solo guardo los que cambiaron, borraron o agregaron
            if (this.oldValue != this.value || this.removed == 'true' || idInt == 0) {

                if (this.removed == 'true' && idInt != 0) {
                    arrayDeletesParam.push(idInt);
                }
                else {

                    var saveObject = {};
                    saveObject["Id"] = idInt;
                    saveObject["ProductoId"] = productoId;
                    saveObject["NumeroSemana"] = columna + 1;
                    saveObject["Cantidad"] = this.value;

                    arrayUpdatesParam.push(saveObject);
                }
            }

        });

        var Proxy = new serviceProxy("/Svc/Planning.svc/");

        Proxy.invoke("UpdateProducts", { planProdId: planProduccionId, updates: arrayUpdatesParam, removedIds: arrayDeletesParam },
         function (result) {
             alert(result);
             location.href = location.href;
         }, function (err) {
             alert(err);
         });
    }
}